package main

import "fmt"

/** 函数类型 和 回调函数**/
func main() {
	fmt.Println("====== type ======")
	var test01 testType
	var test02 testType
	test01 = add
	test02 = minus
	test01(1, 2)
	test02(5, 4) //给test01 赋不同的实参就能实现不同的功能
	fmt.Println("====== callback ======")
	r := myfunc(6, 8, add)
	m := myfunc(10, 2, minus)
	fmt.Printf("r=%v,m=%v\n", r, m)
}

//定义函数类型
type testType func(a, b int) (ret int)

func add(a, b int) (ret int) {
	ret = a + b
	fmt.Println("add=", ret)
	return
}

func minus(a, b int) (ret int) {
	ret = a - b
	fmt.Println("minus=", ret)
	return
}

//回调函数，有一个参数是函数类型，这个参数就是回调函数，也叫多态参数
//多态就是多种形态，用同一个接口，有不同的实现
func myfunc(a int, b int, tfunc testType) (ret int) {
	ret = tfunc(a, b)
	return
}
